// 专门处理路由权限的文件

// 权限拦截在路由跳转，使用导航守卫

import router from '@/router';
import store from '@/store';
import nprogress from 'nprogress';
import NProgress from 'nprogress';
import 'nprogress/nprogress.css';

// 设置白名单（白名单中的页面不需要token即可登录）
const writeList = ['/login', '/404'];

router.beforeEach(async(to, from, next) => {
    nprogress.start();
    if (store.getters.token) {
        if (to.path === '/login') {
            next('/'); // 如果有token值，并且目前是在登录页面，那就“免登录”，直接进入主页
        } else {
            if (!store.getters.userId) {
                const { roles } = await store.dispatch('user/getUserInfo');
                // 调用vuex中筛选权限的actions，筛选出当前用户的可用动态路由
                const routes = await store.dispatch('permission/filterRoutes', roles.menus);
                router.addRoutes([...routes, { path: '*', redirect: '/404', hidden: true }]);
                next(to.path);
            } else {
                next(); // 如果有token值，但是不在登录页，那就随便在哪一页，直接放行进入下一页。
            }
        }
    } else {
        if (writeList.indexOf(to.path) > -1) {
            next();
        } else {
            next('/login');
        }
    }
    NProgress.done();
});

// 后置导航守卫
router.afterEach(() => {
    NProgress.done();
});